/*
2021-7-21
https://www.acwing.com/problem/content/922/
*/ 

#include<cstring>
#include<iostream>
#include<algorithm>
#include<sstream>

using namespace std;
const int N=505;
int dist[N];
bool g[N][N];
int n,m;
int stop[N];
int q[N];

void bfs()
{
    memset(dist,0x3f,sizeof dist);
    dist[1]=0;
    int hh=0,tt=0;
    q[0]=1;
    
    while(hh<=tt)
    {
        int t=q[hh++];
        for(int i=1;i<=n;i++)
            if(g[t][i] && dist[i]>dist[t]+1)
            {
                dist[i]=dist[t]+1;
                q[++tt]=i;
            }
    }
}

int main()
{
    cin>>m>>n;
    
    string line;
    getline(cin,line);
    while(m--)
    {
        getline(cin,line);
        stringstream ssin(line);
        
        int cnt=0,p;
        while(ssin>>p) stop[cnt++]=p;
        
        for(int i=0;i<cnt;i++)
            for(int j=i+1;j<cnt;j++)
                g[stop[i]][stop[j]]=true;
        
    }
    
    bfs();
    if(dist[n]==0x3f3f3f3f) puts("NO");
    else cout<<max(dist[n]-1,0)<<endl;
    
    return 0;
}

